#!/usr/bin/env bash


# INFO------------------------------------------------------------------


#    GNU GENERAL PUBLIC LICENSE
#
#    Distro Down - Baixe e grave ISO's facilmente.
#    Copyright (C) 2018  <Guilherme Machado>
#    Free Software Foundation, Inc.
#
#-----------------------------------------------------------------------
#
#    This program is free software: you can redistribute 
#    it and/or modify it under the terms of the GNU General 
#    Public License as published by the Free Software Foundation, 
#    either version 3 of the License, or (at your option) any later
#    version.
#
#    This program is distributed in the hope that it will be useful, 
#    but WITHOUT ANY WARRANTY; without even the implied warranty of 
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#    See the GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see 
#    <http://www.gnu.org/licenses/>.
#
#
#    Nome: distrodown
#    Autor: Guilherme Felix Machado
#    Contato: < machadofguilherme@gmail.com >
#    Desenvolvido em: 27 de Março de 2018
#    Versão: 1.8
#
#    Descrição: Distro Down é uma aplicação destinada a tornar mais fá-
#    cil o download e gravação de sua ISO favorita. Não precisa mais ir 
#    em site oficial, basta apenas acessar o programa pelo seu shell e 
#    efetuar o download enquanto trabalha ou estuda.


# VARIÁVEIS-------------------------------------------------------------


#--------------------------------- cores -------------------------------
vermelho=$(tput setaf 1)
verde=$(tput setaf 2)
azul=$(tput setaf 4)
fecha_cor=$(tput sgr 0)
negrito=$(tput bold)
#-----------------------------------------------------------------------


#----------------------------- principais ------------------------------
hash="https://notabug.org/colorado/distrodown/raw/master/.hash"
pasta="/home/$USER/"
fonte_local="libs/"
endereco_sync="https://notabug.org/colorado/distrodown.git"
aviso=$(echo -e "
\t${verde}${negrito} O Download da ISO foi concluído com sucesso.${fecha_cor}")
mensagem="Digite uma opção válida. Execute 'distrodown --info' ou 
\t'distrodown --help' para mais informações."
#-----------------------------------------------------------------------


#-------------------------------- chaves -------------------------------
sin="0" # Desligado
#-----------------------------------------------------------------------


#-------------------------------- url's --------------------------------
# As URLs aqui contidas são endereços oficiais dos repositórios de cada
# um dos projetos aqui disponíveis. O conteúdo é exatamente o mesmo, sem
# nenhuma modificação em seus dados. Os endereços foram encurtados com 
# serviço para melhor leitura de código. Se ainda assim houver dúvidas,
# verifique a hash do arquivo baixado e compare. 
#
#
#=====================================================================
# Espelhos:
#=====================================================================
#
#
#   http://mirror.clarkson.edu/
#   https://mirrors.edge.kernel.org/
#
#

arch_linux="http://bit.ly/2AuEtuN" 
debian_os="http://bit.ly/2KXhjC3" 
fedora_core="http://bit.ly/2MAxUbb" 
l_mint="http://bit.ly/2NctqsH" 
centos_os="http://bit.ly/2tQ2tSB" 
opensuse_leap="http://bit.ly/2Kp5LHP" 
opensuse_roll="http://bit.ly/2lK2HHp" 
slackware="http://bit.ly/2NbWi49" 
ubuntults="http://bit.ly/2tSyE3U" 
ubuntuserverlts="http://bit.ly/2MBv0TT" 
gentoo="http://bit.ly/2KgrCQR" 
stage3="https://bit.ly/2tiPrwD" 
trisquel="http://bit.ly/2trucJe" 
deepin="http://bit.ly/2lIYUtN" 
manjaro_rato="http://bit.ly/2A5HWzE" 
manjaro_plasma="http://bit.ly/2NBMFeH" 
manjaro_pe="http://bit.ly/2mzOeOu"
manjaro_construtor="http://bit.ly/2my3DPi"
elementary="http://bit.ly/2thynrB"
puppy="http://bit.ly/2K0s6uK" 
solus="http://bit.ly/2ywa1Q3"
artixlinux="http://bit.ly/2KmszYE" 
sabayon_mate="http://bit.ly/2KwIwux" 
parrot_sec="http://bit.ly/2KmGlub"
#-----------------------------------------------------------------------

#--------------------------------- names -------------------------------
arch="archlinux-2018.08.01-x86_64.iso"
artix="artix-lxqt-20180108-x86_64.iso"
debian="debian-9.5.0-amd64-netinst.iso"
fedora="Fedora-Workstation-Live-x86_64-28-1.1.iso"
mint="linuxmint-19-cinnamon-64bit.iso"
centos="CentOS-7-x86_64-Minimal-1804.iso"
suseleap="openSUSE-Leap-15.0-DVD-x86_64-Current.iso"
suseroll="openSUSE-Tumbleweed-DVD-x86_64-Current.iso"
slack="slackware64-14.2-install-dvd.iso"
buntu="ubuntu-18.04-desktop-amd64.iso"
buntuserver="ubuntu-18.04-live-server-amd64.iso"
gen="install-amd64-minimal-20180415T214502Z.iso"
stage="stage3-amd64-20180614T214502Z.tar.xz"
trisquellibre="trisquel_8.0_amd64.iso"
deepinch="deepin-15.6-amd64.iso"
manjaxfce="manjaro-xfce-17.1.11-stable-x86_64.iso"
manjakde="manjaro-kde-17.1.11-stable-x86_64.iso"
manjagnome="manjaro-gnome-17.1.11-stable-x86_64.iso"
manjaconstrutor="manjaro-architect-17.1.11-stable-x86_64.iso"
eos="elementaryos-0.4.1-stable.20180214.iso"
chibi_puppy="xenialpup64-7.5-uefi.iso"
sol="Solus-3-Budgie.iso"
sabamate="Sabayon_Linux_18.04_amd64_MATE.iso"
pa_security="Parrot-security-4.1_amd64.iso"
#-----------------------------------------------------------------------


# BIBLIOTECAS ----------------------------------------------------------

# Teste para habilitar libs.
if [ -e "/usr/lib/distrodown" ]; then
	sin=1 && fonte_local="/usr/lib/distrodown/"
fi

source "$fonte_local"libdd
source "$fonte_local"libburn

#-----------------------------------------------------------------------


# FUNÇÕES --------------------------------------------------------------


ajuda () {
cat << EOF
 
 
      Menu de ajuda para a utilização do Distro Down.
 
 
 MODO DE USO:
    	
    	distrodown <operation> [options]    	
    	
               :: Para baixar uma ISO 		   
               Ex1: distrodown archlinux
               Ex2: distrodown opensuse
               
               
               :: Uso geral
               Ex1: distrodown -i
               Ex2: distrodown --info

 OPÇÕES:

	-h       --help           Mostra o menu de ajuda e sai.
	-i       --info           Lista as ISO's disponíveis.
	-v       --version        Exibe a versão do aplicativo.
	-w       --write          Permite escrita em dispositivo USB.
	-s       --sync           Obtém a nova versão.
EOF
}

sincro () {

# Função de sincronização com o repositório.
    typeset t
    t="0"
    while sleep 1.0170; do
        git clone -q "$endereco_sync" && mv distrodown /tmp/
        # Teste de transferência de dados.
        if [ -d "/usr/lib/distrodown/" ]; then
            sudo rm /usr/lib/distrodown/*
            sudo cp /tmp/distrodown/distrodown /usr/bin/
            sudo cp -R /tmp/distrodown/libs/* /usr/lib/distrodown/
        else
            rm libs/*
            cp /tmp/distrodown/distrodown $PWD
            cp -R /tmp/distrodown/libs/* $PWD/libs/
        fi
        rm -rf /tmp/distrodown/
        echo -ne "\r${vermelho}[${fecha_cor}${negrito}${azul} ${t}%${fecha_cor} ${vermelho}]${fecha_cor}"
        ((t++))
        [ "$t" -eq 101 ] && break
    done

}

sobre () {

		echo "

            Copyright (C) 2018  <Guilherme Machado>
            Versão 1.8
            Free Software Foundation, Inc.

            This program is distributed in the hope that it 
            will be useful, but WITHOUT ANY WARRANTY; without even 
            the implied warranty of MERCHANTABILITY or FITNESS FOR 
            A PARTICULAR PURPOSE. See the GNU General Public License
            for more details.

            "  
		exit 0 
} 

axel_progresso () {
  axel -a -n 5 "$1" -o "$pasta/$2"
}

ctrl_c () {
	echo -e "
	\n\n\t${vermelho}${negrito} Encerrando programa...${fecha_cor}\n\n"
	[ -e /tmp/.hash ] && rm /tmp/.hash
	[ -e /dev/sdb   ] && sudo mkfs.vfat /dev/sdb1 >/dev/null 2>&1
	exit 0
}

#-----------------------------------------------------------------------


# BLOCO DE TESTES-------------------------------------------------------

# Teste se dependências estão instaladas no sistema.
if [ ! $(type -P sudo)       ] >/dev/null 2>&1; then
	echo "Para execução, instale o pacote 'sudo'."
	exit 1
fi

if [ ! $(type -P git)        ] >/dev/null 2>&1; then
	echo "Para execução, instale o pacote 'git'."
	exit 1
fi

if [ ! $(type -P mkfs)       ] >/dev/null 2>&1; then
	echo "Para execução, instale o pacote 'dosfstools'."
	exit 1
fi

if [ ! $(type -P gvfs-mount) ] >/dev/null 2>&1; then
	echo "Para execução, instale o pacote 'gvfs'."
	exit 1
fi

if [ ! $(type -P axel) ] >/dev/null 2>&1; then
	echo "Para execução, instale o pacote 'axel'."
	exit 1
fi

# Teste para imprimir ajuda ou mensagem de erro.
if   [ "$1" = ""        ] || \
     [ "$1" = "-h"      ] || \
     [ "$1" = "--help"  ]; then
      ajuda && mensagem=""
fi

# Teste de compatibilidade com o usuário.
[ "$UID" -eq 0 ] && pasta="/"
#-----------------------------------------------------------------------


# PROGRAMA -------------------------------------------------------------

# Teclas chave de encerramento.
trap ctrl_c INT

case $1 in

# Chama o menu '--info'.
   -i|--info)  
       echo -e "
                    ISO's disponíveis.


        > archlinux                > artixlinux               
        > debian                   > fedora                  
        > mint                     > centos                  
        > opensuse                 > slackware                 
        > ubuntu                   > gentoo                   
        > trisquel                 > deepin                   
        > manjaro                  > elementary               
        > puppy                    > solus                     
        > parrot                   > sabayon\n"
        exit 0 
    ;;

# Exibe a versão e o desenvolvedor do aplicativo.
   -v|--version) 
      sobre
    ;;

# Os blocos seguintes realizam o download das ISO's.
   archlinux) # Arch Linux
   
     sleep 2 && printf "
     
     1) Arch Linux      2) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $arch_linux $arch; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif [ "$opcao" = 2 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ]; then
             echo -ne "\n$mensagem" && exit
     fi 
    ;;
    
    artixlinux) # Artix Linux
    
     sleep 2 && printf "
     
     1) Artix Linux      2) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $artixlinux $artix; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif [ "$opcao" = 2 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ]; then
             echo -ne "\n$mensagem" && exit
     fi 
    ;;

    debian) # Debian
    
     sleep 2 && printf "
     
     1) Debian 9      2) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $debian_os $debian; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif [ "$opcao" = 2 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ]; then
             echo -ne "\n$mensagem" && exit
     fi 
    ;;

    fedora) # Fedora
    
     sleep 2 && printf "
     
     1) Fedora Workstation 28      2) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $fedora_core $fedora; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif [ "$opcao" = 2 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ]; then
             echo -ne "\n$mensagem" && exit
     fi 
    ;;

    mint) # Linux Mint
    
          sleep 2 && printf "
     
     1) Linux Mint - Cinnamon      2) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $l_mint $mint; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif [ "$opcao" = 2 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ]; then
             echo -ne "\n$mensagem" && exit
     fi 
    ;;

    centos) # CentOS
    
     sleep 2 && printf "
     
     1) CentOS 7      2) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $centos_os $centos; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif [ "$opcao" = 2 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ]; then
             echo -ne "\n$mensagem" && exit
     fi     
    ;;
    
    opensuse) # openSUSE
     sleep 2 && printf "
     
     1) openSUSE Leap      2) openSUSE Tumbleweed
     3) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
            echo
            # A distro é baixada via axel.
            if axel_progresso $opensuse_leap $suseleap; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
            else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
            fi       
            
     elif [ "$opcao" = 2  ]; then
            echo
            # A distro é baixada via axel.
            if axel_progresso $opensuse_roll $suseroll; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
            else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
            fi
            
     elif [ "$opcao" = 3  ]; then
            ctrl_c
            
     elif [ "$opcao" != 1 ] || \
          [ "$opcao" != 2 ] || \
          [ "$opcao" != 3 ]; then
            echo -ne "\n$mensagem"
     fi       
    ;;

    slackware) # Slackware Linux
    
      sleep 2 && printf "
     
     1) Slackware 14.2      2) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $slackware $slack; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif [ "$opcao" = 2 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ]; then
             echo -ne "\n$mensagem" && exit
     fi        
    ;;

    ubuntu) # Ubuntu
    
     sleep 2 && printf "
     
     1) Ubuntu LTS      2) Ubuntu Server LTS
     3) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $ubuntults $buntu; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif [ "$opcao" = 2 ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $ubuntuserverlts $buntuserver; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif [ "$opcao" = 3 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ] || \
          [ "$opcao" != "3" ]; then
             echo -ne "\n$mensagem" && exit
     fi        
    ;;

    gentoo) # Gentoo
    
       sleep 2 && printf "
     
     1) Gentoo      2) Stage3
     3) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $gentoo $gen; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif   [ "$opcao" = 2  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $stage3 $stage; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi        
             
     elif [ "$opcao" = 3 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ] || \
          [ "$opcao" != "3" ]; then
             echo -ne "\n$mensagem" && exit 1
     fi 
    ;;
     
    trisquel) # Trisquel GNU/Linux
    
       sleep 2 && printf "
     
     1) Trisquel GNU/Linux      2) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $trisquel $trisquellibre; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi   
             
     elif [ "$opcao" = 2 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ]; then
             echo -ne "\n$mensagem" && exit 1
     fi 
    ;;

    deepin) # Deepin Linux
    
       sleep 2 && printf "
     
     1) Deepin Linux      2) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $deepin $deepinch; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif [ "$opcao" = 2 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ]; then
             echo -ne "\n$mensagem" && exit 1
     fi 
    ;;

     manjaro) # Manjaro
     
     sleep 2 && printf "
     
     1) Manjaro Xfce      2) Manjaro GNOME 
     3) Manjaro KDE       4) Manjaro Architect
     5) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
            echo
            # A distro é baixada via axel.
            if axel_progresso $manjaro_rato $manjaxfce; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
            else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
            fi
            
     elif [ "$opcao" = 2  ]; then
            echo
	        # A distro é baixada via axel.
	        if axel_progresso $manjaro_pe $manjagnome; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
            else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
            fi
            
     elif [ "$opcao" = 3  ]; then
            echo
            # A distro é baixada via axel.
            if axel_progresso $manjaro_plasma $manjakde; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
            else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
            fi	  
            
     elif [ "$opcao" = 4  ]; then
            echo
            # A distro é baixada via axel.
            if axel_progresso $manjaro_construtor $manjaconstrutor; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
            else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
            fi	  
            
     elif [ "$opcao" = 5  ]; then
            sleep 2s && ctrl_c
            
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ] || \
          [ "$opcao" != "3" ] || \
          [ "$opcao" != "4" ] || \
          [ "$opcao" != "5" ]; then
            echo -ne "\n$mensagem"
     fi
    ;; 

    elementary) # elementary OS
    
       sleep 2 && printf "
     
     1) elementaryOS      2) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $elementary $eos; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif [ "$opcao" = 2 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ]; then
             echo -ne "\n$mensagem" && exit 1
     fi 
    ;;

    puppy) # Puppy Linux
    
       sleep 2 && printf "
     
     1) Puppy Linux      2) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $puppy $chibi_puppy; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif [ "$opcao" = 2 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ]; then
             echo -ne "\n$mensagem" && exit 1
     fi     
    ;;

    solus) # Solus
    
       sleep 2 && printf "
     
     1) Solus - Budgie      2) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $solus $sol; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif [ "$opcao" = 2 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ]; then
             echo -ne "\n$mensagem" && exit 1
     fi 
    ;;
    
    parrot) # Parrot
      
       sleep 2 && printf "
     
     1) Parrot - Security      2) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $parrot_sec $pa_security; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif [ "$opcao" = 2 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ]; then
             echo -ne "\n$mensagem" && exit 1
     fi 
    ;;
    
    sabayon) # Sabayon
     
      sleep 2 && printf "
     
     1) Sabayon - MATE      2) Cancelar
     "
     sleep 1
     echo -ne "\nDigite a sua opção: " && read opcao
    
     if   [ "$opcao" = 1  ]; then
             echo
             # A distro é baixada via axel.
             if axel_progresso $sabayon_mate $sabamate; then
                sleep 2 ; echo -e "$aviso
                " ; exit 0
             else
                echo -e "	${vermelho}${negrito} Falha no download. Tente novamente.${fecha_cor}
                "
                exit 1
             fi
             
     elif [ "$opcao" = 2 ]; then
             ctrl_c
             
     elif [ "$opcao" != "1" ] || \
          [ "$opcao" != "2" ]; then
             echo -ne "\n$mensagem" && exit 1
     fi           	   
    ;;
								
# Processo de gravação em USB.
    -w|--write) 
	   shift
	   [ "$1" = "archlinux"       ]      && write_arch         ||  \
	   [ "$1" = "artixlinux"      ]      && write_artix        ||  \
	   [ "$1" = "debian"          ]      && write_debian       ||  \
	   [ "$1" = "fedora"          ]      && write_fedora       ||  \
	   [ "$1" = "mint"            ]      && write_mint         ||  \
	   [ "$1" = "centos"          ]      && write_centos       ||  \
	   [ "$1" = "opensuse"        ]      && write_opensuse     ||  \
	   [ "$1" = "slackware"       ]      && write_slackware    ||  \
	   [ "$1" = "ubuntu"          ]      && write_ubuntu       ||  \
 	   [ "$1" = "gentoo"          ]      && write_gentoo       ||  \
 	   [ "$1" = "trisquel"        ]      && write_trisquel     ||  \
 	   [ "$1" = "deepin"          ]      && write_deepin       ||  \
 	   [ "$1" = "manjaro"         ]      && write_manjaro      ||  \
 	   [ "$1" = "elementary"      ]      && write_elementary   ||  \
 	   [ "$1" = "puppy"           ]      && write_puppy        ||  \
 	   [ "$1" = "solus"           ]      && write_solus        ||  \
 	   [ "$1" = "parrot"          ]      && write_parrot       ||  \
 	   [ "$1" = "sabayon"         ]      && write_sabayon
   ;;
   
# Sincronização.   
   -s|--sync)  
        axel -q $hash -o /tmp/
        source /tmp/.hash
        if [ "$lancamento" = "1.8" ]; then
            echo -ne "
            \n\t${azul}${negrito}• • •\t${verde}ǁ Distro Down está atualizado. ǁ${fecha_cor}\n"
            sleep 3 && printf "\n—————————————————————————————————————————————————\n"
            sleep 2 && echo -ne "\n\t\t${vermelho}Saindo...${fecha_cor}\n\n"
            rm /tmp/.hash
            sleep 2 && exit 0
        else    
            sudo echo -ne "
	
	    \t${verde}${negrito}Atualizando para a nova versão...\
        ${fecha_cor}" && sincro
	    echo; printf "
	    \tSincronização completa.\n\n"
	    rm /tmp/.hash
	    fi
   ;;
   
   *)
   echo -ne "\n\t${vermelho}${negrito}$mensagem${fecha_cor}\n"
   ;;
   
esac

#-----------------------------------------------------------------------
